﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using System.Data.SqlClient;

namespace AccesoBD
{
    public class Cuotas
    {
        DateTime d;

        public int contarAdherentes(long nroAf)
        {
            int contador = 0;

            try
            {
                SqlConnection con = DB.Conectar();
                string comando = "SELECT  * FROM Afiliacion WHERE (nroAfiliadoTitular = @nroAf)";

                List<SqlParameter> lstParametros = new List<SqlParameter>();


                lstParametros.Add(new SqlParameter("@nroAf", nroAf));


                SqlDataReader dr = DB.GenerarReader(comando, lstParametros, con);

                while (dr.Read())
                {
                    if (dr["idAfiliacion"] != DBNull.Value)
                    {
                        contador++;
                    }

                }
                con.Close();

                return contador;
            }
            catch (Exception ex)
            {
                throw new Exception("No se encuentra cuota de afiliado !", ex);

            }


        }

        public DateTime buscarUltimaFechaDePago2(int id)
        {


            try
            {
                SqlConnection con = DB.Conectar();
                string comando = "SELECT  MAX(fechaPago) AS Expr1  FROM Cuota_Afiliado WHERE (idInstitucion = @idInst)";

                List<SqlParameter> lstParametros = new List<SqlParameter>();


                lstParametros.Add(new SqlParameter("@idInst", id));


                SqlDataReader dr = DB.GenerarReader(comando, lstParametros, con);

                while (dr.Read())
                {
                    if (dr["Expr1"] != DBNull.Value)
                    {
                        d = Convert.ToDateTime(dr["Expr1"].ToString());
                    }
                    else
                    {
                        d = Convert.ToDateTime("01/01/4000");
                    }


                }
                con.Close();

                return d;
            }
            catch (Exception ex)
            {
                throw new Exception("No se encuentra cuota de afiliado !", ex);

            }


        }


        public DateTime buscarUltimaFechaDePago(long nroAf)
        {
           
           
            try
            {
                SqlConnection con = DB.Conectar();
                string comando = "SELECT  MAX(fechaPago) AS Expr1  FROM Cuota_Afiliado WHERE (nroAfiliado = @nroAf)";

                List<SqlParameter> lstParametros = new List<SqlParameter>();


                lstParametros.Add(new SqlParameter("@nroAf", nroAf));


                SqlDataReader dr = DB.GenerarReader(comando, lstParametros, con);

                while (dr.Read())
                {
                    if (dr["Expr1"] != DBNull.Value)
                    {
                        d = Convert.ToDateTime(dr["Expr1"].ToString());
                    }
                    else
                    {
                        d = Convert.ToDateTime("01/01/4000");
                    }


                }
                con.Close();

                return d;
            }
            catch (Exception ex)
            {
                throw new Exception("No se encuentra cuota de afiliado !", ex );

            }


        }

        public DateTime buscarFechaVencimiento2(int idInstitucion)
        {

            try
            {
                SqlConnection con = DB.Conectar();
                string comando = "SELECT  MAX(fechaVencimiento) AS Expr1  FROM Cuota_Afiliado WHERE (idInstitucion = @nroAf)";

                List<SqlParameter> lstParametros = new List<SqlParameter>();


                lstParametros.Add(new SqlParameter("@nroAf", idInstitucion));


                SqlDataReader dr = DB.GenerarReader(comando, lstParametros, con);

                while (dr.Read())
                {
                    if (dr["Expr1"] != null)
                    {
                        d = Convert.ToDateTime(dr["Expr1"].ToString());
                    }
                }
                con.Close();

                return d;
            }
            catch (Exception ex)
            {
                throw ex;

            }

        }

        public DateTime buscarFechaVencimiento(long nroAfiliado)
        {

            try
            {
                SqlConnection con = DB.Conectar();
                string comando = "SELECT  MAX(fechaVencimiento) AS Expr1  FROM Cuota_Afiliado WHERE (nroAfiliado = @nroAf)";

                List<SqlParameter> lstParametros = new List<SqlParameter>();


                lstParametros.Add(new SqlParameter("@nroAf", nroAfiliado));


                SqlDataReader dr = DB.GenerarReader(comando, lstParametros, con);

                while (dr.Read())
                {
                    if (dr["Expr1"] != null)
                    {
                        d = Convert.ToDateTime(dr["Expr1"].ToString());
                    }
                }
                con.Close();

                return d;
            }
            catch (Exception ex)
            {
                throw ex;

            }

        }

           public String datosAfiliadoTitutlar(long nro)
        {
            string datos = "";
            
               SqlConnection con = DB.Conectar();
                string comando = "SELECT Afiliado.nroAfiliado, Persona.nombre, Persona.apellido FROM Afiliado INNER JOIN Paciente ON Afiliado.nroAfiliado = Paciente.nroAfiliado INNER JOIN Persona ON Paciente.idPersona = Persona.codPersona WHERE (Afiliado.nroAfiliado = @nroAfiliado)";
                List<SqlParameter> lstParametros = new List<SqlParameter>();
                lstParametros.Add(new SqlParameter("@nroAfiliado", nro ));
                SqlDataReader dr = DB.GenerarReader(comando, lstParametros, con);
                while (dr.Read())
                {
                    if (dr["nombre"] != null)
                    {
                        datos = dr["nombre"].ToString() + " " + dr["apellido"].ToString();
                    }
                }
                   return datos;
            }


           public Cuota buscarUltimaCuotaAfiliado2(int id, DateTime d)
           {
               Cuota c = new Cuota();
               Persona p = new Persona();


               try
               {
                   SqlConnection con = DB.Conectar();
                   string comando = "SELECT * FROM Cuota_Afiliado WHERE (idInstitucion = @id) AND (fechaVencimiento = @fecha)";

                   List<SqlParameter> lstParametros = new List<SqlParameter>();


                   lstParametros.Add(new SqlParameter("@id", id));
                   lstParametros.Add(new SqlParameter("@fecha", d.Date));

                   SqlDataReader dr = DB.GenerarReader(comando, lstParametros, con);

                   while (dr.Read())
                   {
                       c.idCuotaAf = Convert.ToInt32(dr["idCuotaAfiliado"].ToString());
                       if (dr["fechaPago"] == DBNull.Value) c.fechaPago = null;
                       else Convert.ToDateTime(dr["fechaPago"].ToString());
                       if (dr["idRecibo"] == DBNull.Value) c.idRecibo = null;
                       else Convert.ToInt32(dr["idRecibo"].ToString());
                       if (dr["montoRecargo"] == DBNull.Value) c.idRecibo = null;
                       else Convert.ToDouble(dr["montoRecargo"].ToString());
                       c.mes = Convert.ToInt32(dr["mes"].ToString());
                       c.año = Convert.ToInt32(dr["año"].ToString());
                       c.fechaVencimiento = Convert.ToDateTime(dr["fechaVencimiento"].ToString());
                       c.idInst = Convert.ToInt32(dr["idInstitucion"].ToString());
                       //int cantAd = this.contarAdherentes(nroAf);
                       //if (cantAd > 0)
                       //{
                       //    c.importe = (float)(Convert.ToDouble(dr["importe"].ToString())) + ((float)(Convert.ToDouble(dr["importe"].ToString())) * cantAd);
                       //}
                       //else
                       //{
                           c.importe = (float)(Convert.ToDouble(dr["importe"].ToString()));
                       //}
                   }
                   con.Close();

                   return c;
               }
               catch (Exception ex)
               {
                   throw ex;

               }


           }

      public Cuota buscarUltimaCuotaAfiliado(long nroAf,DateTime d)
        {
            Cuota c = new Cuota();
            Persona p = new Persona();
            

            try
            {
                SqlConnection con = DB.Conectar();
                string comando = "SELECT * FROM Cuota_Afiliado WHERE (nroAfiliado = @nroAf) AND (fechaVencimiento = @fecha)";

                List<SqlParameter> lstParametros = new List<SqlParameter>();


                lstParametros.Add(new SqlParameter("@nroAf", nroAf ));
                lstParametros.Add(new SqlParameter("@fecha", d.Date));

                SqlDataReader dr = DB.GenerarReader(comando, lstParametros, con);

                while (dr.Read())
                {
                    c.idCuotaAf = Convert.ToInt32(dr["idCuotaAfiliado"].ToString());
                    if (dr["fechaPago"] == DBNull.Value) c.fechaPago= null ; 
                    else Convert.ToDateTime(dr["fechaPago"].ToString());
                    if (dr["idRecibo"] == DBNull.Value) c.idRecibo = null;
                    else Convert.ToInt32(dr["idRecibo"].ToString());
                    if (dr["montoRecargo"] == DBNull.Value) c.idRecibo = null;
                    else Convert.ToDouble(dr["montoRecargo"].ToString());
                    c.mes = Convert.ToInt32(dr["mes"].ToString());
                    c.año = Convert.ToInt32(dr["año"].ToString());
                    c.fechaVencimiento = Convert.ToDateTime(dr["fechaVencimiento"].ToString());
                    c.idAfiliado  = Convert.ToInt32(dr["nroAfiliado"].ToString());
                    //int cantAd = this.contarAdherentes(nroAf);
                    //if (cantAd > 0)
                    //{
                    //    c.importe = (float)(Convert.ToDouble(dr["importe"].ToString())) + ((float)(Convert.ToDouble(dr["importe"].ToString())) * cantAd);
                    //}
                    //else
                    //{
                        c.importe = (float)(Convert.ToDouble(dr["importe"].ToString()));
                   // }
                 }
                con.Close();

                return c;
            }
            catch (Exception ex)
            {
                throw new Exception("No se encuentra cuota de afiliado !", ex );

            }


        }

      public bool registrarCuota(long nroAfiliado, float precio, DateTime fechaVencimiento, long idRecibo)
      {
          bool res = false;
          SqlConnection conexion = DB.Conectar();

          string comando = "INSERT INTO Cuota_Afiliado(fechaPago,mes, año, nroAfiliado, fechaVencimiento, importe, idRecibo) VALUES (@fechaPago, @mes,@año,@nroAfiliado,@fechaVencimiento, @importe,@idRecibo)";
          List<SqlParameter> listaParam5 = new List<SqlParameter>();
          listaParam5.Add(new SqlParameter("@mes", DateTime.Now.Month));
          listaParam5.Add(new SqlParameter("@año", DateTime.Now.Year));
          listaParam5.Add(new SqlParameter("@nroAfiliado", nroAfiliado));
          listaParam5.Add(new SqlParameter("@fechaVencimiento", fechaVencimiento));
          listaParam5.Add(new SqlParameter("@importe", precio));
          listaParam5.Add(new SqlParameter("@fechaPago", DateTime.Now));
          listaParam5.Add(new SqlParameter("@idRecibo", idRecibo));
          int filas = DB.EjecutarCommand(comando, listaParam5, conexion);
          if (filas > 0) res = true;
          else res = false;
          conexion.Close();

          return res;
      }
      public bool registrarCuota2(int id, float precio, DateTime fechaVencimiento, long idRecibo)
      {
          bool res = false;
          SqlConnection conexion = DB.Conectar();

          string comando = "INSERT INTO Cuota_Afiliado(fechaPago,mes, año, idInstitucion, fechaVencimiento, importe, idRecibo) VALUES (@fechaPago, @mes,@año,@id,@fechaVencimiento, @importe,@idRecibo)";
          List<SqlParameter> listaParam5 = new List<SqlParameter>();
          listaParam5.Add(new SqlParameter("@mes", DateTime.Now.Month));
          listaParam5.Add(new SqlParameter("@año", DateTime.Now.Year));
          listaParam5.Add(new SqlParameter("@id", id));
          listaParam5.Add(new SqlParameter("@fechaVencimiento", fechaVencimiento));
          listaParam5.Add(new SqlParameter("@importe", precio));
          listaParam5.Add(new SqlParameter("@fechaPago", DateTime.Now));
          listaParam5.Add(new SqlParameter("@idRecibo", idRecibo));
          int filas = DB.EjecutarCommand(comando, listaParam5, conexion);
          if (filas > 0) res = true;
          else res = false;
          conexion.Close();

          return res;
      }
    }



    }

